package com.company.array;

/**
 * @author jrue
 * @description https://leetcode-cn.com/problems/minimum-size-subarray-sum/
 * @date 2019/11/15 15:53
 * 给定一个含有 n 个正整数的数组和一个正整数 s ，
 * 找出该数组中满足其和 ≥ s 的长度最小的连续子数组。
 * 如果不存在符合条件的连续子数组，返回 0。(滑动窗口)
 */
public class MinSubArrayLen {

    public static void main(String[] args) {
        System.out.println(minSubArrayLen(7, new int[]{2, 3, 1, 2, 4, 3}));
    }

    public static int minSubArrayLen(int s, int[] nums) {
        if (nums.length == 0) return 0;
        int W = 0;
        int res = Integer.MAX_VALUE;
        int left = -1;
        for (int i = 0; i < nums.length; i++) {
            while (W + nums[i] >= s) {
                res = Math.min(res, i - left);
                W -= nums[left + 1];
                left++;
            }
            W += nums[i];
        }
        return res == Integer.MAX_VALUE ? 0 :res;
    }

}
